/*
Copyright [2012] [Maria Eugenia Malagamba]
Copyright [2012] [Leandro Pellegrino]
Copyright [2012] [Julia Gambuzzi]
Copyright [2012] [Ignacio Capodanno]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

#include "GeneradorBonus.h"

GeneradorBonus::GeneradorBonus(double posicionX, double posicionY,string pathDeLaImagen, int anchoDeLaImagen, 
							   int altoDeLaImagen,int cantidadFrames):Colisionable(posicionX, posicionY, pathDeLaImagen, anchoDeLaImagen,
							   altoDeLaImagen,0, cantidadFrames,0){

								   //Agrego bonus al vector.
								   nombresBonus[MISIL] = "Misil";
								   nombresBonus[BOMBA] = "Bomba";
								   nombresBonus[NEUTRONES] = "Neutrones";
								   nombresBonus[MINA] = "Mina";
								   nombresBonus[LASER] = "Laser";
								   nombresBonus[ESCUDO] = "Escudo";
								   nombresBonus[SUPERESCUDO] = "SuperEscudo";
								   nombresBonus[INVISIBILIDAD] = "Invisibilidad";
								   this->timer = new Timer();
								   this->timer->tiempoDesdeUltimoFrame();
								   this->duracion = 6 * 15;
								   this->nuevo = true;

}

void GeneradorBonus::moverse(){
	this->duracion -= this->timer->tiempoDesdeUltimoFrame();
	this->framesCircular();
}

Bonus* GeneradorBonus::obtenerBonusSegunEnergiaNave(int energiaNave){

	srand(time(NULL));
	int numeroBonus;

	if (energiaNave < 50){
		numeroBonus = (rand() % 8 ) + 5;

	} else {
		numeroBonus = (rand() % 4 );
	}	

	return getInstanciaBonus((bonus_disponibles)numeroBonus);
}

Bonus* GeneradorBonus::obtenerBonusSegunProbabilidad(ValoresParametrizablesBonus* valoresParametrizables){

	// elijo un número random entre 1 y 100
	srand(time(NULL));
	int numeroRandom = ((rand() % 100) + 1);
	//int numeroBonus = (rand() % 8);

	// de acuerdo al valor elegido, tomo un bonus
	// Recordemos que: 0 LASER | 1 MINA | 2 ESCUDO | 3 MISIL | 4 BOMBA | 5 NEUTRONES | 6 SUPERESCUDO | 7 INVISIBILIDAD
	double acumulador = 0;
	unsigned int numeroBonus = 0;
	for (numeroBonus = 0; numeroBonus < 7; numeroBonus++){
		acumulador += valoresParametrizables->getProbabilidadDe(numeroBonus);

		if (numeroRandom < acumulador){
			// el número random cayó en el rango del bonus
			break;
		}
	}

	return getInstanciaBonus((bonus_disponibles)numeroBonus);
}


Bonus* GeneradorBonus::getInstanciaBonus(bonus_disponibles numeroBonus){

	switch ( numeroBonus ) {
	  case MISIL : 
		  return new Bonus(MISIL,"Arma",5, "Misil_Icono.bmp",20,20);
	  case BOMBA : 
		  return new Bonus(BOMBA,"Arma",1, "Bomba_Icono.bmp",20,20);
	  case MINA : 
		  return new Bonus(MINA,"Arma",3, "Mina_Icono.bmp",20,20);
	  case NEUTRONES: 
		  return new Bonus(NEUTRONES,"Arma",1, "BombaNeutrones_Icono.bmp",20,20);	
	  case LASER: 
		  return new Bonus(LASER,"Arma", "Laser_Icono.bmp",20,20);
	  case SUPERESCUDO: 
		  return new Bonus(SUPERESCUDO,"Defensa", "SuperEscudo_Icono.bmp",20,20);	
	  case ESCUDO :		
		  return new Bonus(ESCUDO,"Defensa", "Escudo_Icono.bmp",20,20);
	  case INVISIBILIDAD: 
		  return new Bonus(INVISIBILIDAD,"Defensa", "Invisibilidad_Icono.bmp",20,20);
	  default:
		  return new Bonus(ESCUDO,"Defensa", "Escudo_Icono.bmp",20,20);
	}
}

int GeneradorBonus::getDuracion(){
	return this->duracion ;
}

void GeneradorBonus::setDuracion(int duracion){
	this->duracion = duracion;
}

void GeneradorBonus::colisionar(){
	this->duracion = 0;
}

int GeneradorBonus::colisionar(int danio){

	this->duracion = 0;
	return 0;
}
bool GeneradorBonus::esNuevo(){
	return this->nuevo;
}
void GeneradorBonus::setNuevo(bool nuevo){
	this->nuevo = nuevo;
}

GeneradorBonus::~GeneradorBonus()
{
	delete this->timer;
}
